package br.senai.sc.controller;

import java.awt.Color;
import java.math.BigDecimal;

/**
 * @author Fernando Marquardt &lt;fernando.marquardt@sc.senai.br&gt;
 * @since 02/02/2012
 * @version $Id: Qualidade.java 28 2012-03-07 20:48:20Z fernando.marquardt $
 */
public enum Qualidade {

	OTIMA(new BigDecimal(80), new BigDecimal(100), Color.BLUE, Color.WHITE), BOA(
			new BigDecimal(52), new BigDecimal(79), Color.GREEN, Color.BLACK), ACEITAVEL(
			new BigDecimal(37), new BigDecimal(51), Color.YELLOW, Color.BLACK), RUIM(
			new BigDecimal(20), new BigDecimal(36), Color.RED, Color.WHITE), PESSIMA(
			BigDecimal.ZERO, new BigDecimal(19), Color.BLACK, Color.WHITE), DESCONHECIDA(
			BigDecimal.ZERO, BigDecimal.ZERO, Color.WHITE, Color.BLACK);

	private BigDecimal iqaMaximo;

	private BigDecimal iqaMinimo;

	private Color cor;

	private Color corTexto;

	private Qualidade(BigDecimal iqaMinimo, BigDecimal iqaMaximo, Color cor,
			Color corTexto) {
		this.iqaMaximo = iqaMaximo;
		this.iqaMinimo = iqaMinimo;
		this.cor = cor;
		this.corTexto = corTexto;
	}

	public BigDecimal getIqaMaximo() {
		return iqaMaximo;
	}

	public BigDecimal getIqaMinimo() {
		return iqaMinimo;
	}

	public Color getCor() {
		return cor;
	}

	public Color getCorTexto() {
		return corTexto;
	}

	public String getCorHexa() {
		String alphaHex = Integer.toHexString(cor.getRGB());

		return Integer.toHexString(cor.getRGB())
				.substring(2, alphaHex.length());
	}

	public String getCorHexaTexto() {
		String alphaHex = Integer.toHexString(corTexto.getRGB());

		return Integer.toHexString(corTexto.getRGB()).substring(2,
				alphaHex.length());
	}

	public static Qualidade getQualidade(BigDecimal iqa) {
		Qualidade qualidadeEncontrada = null;

		for (Qualidade qualidade : values()) {

			BigDecimal iqaMaximo = qualidade.getIqaMaximo();

			if ((iqa.compareTo(iqaMaximo) <= 0)
					&& ((qualidadeEncontrada == null) || (iqaMaximo
							.compareTo(qualidadeEncontrada.getIqaMaximo()) < 0))) {
				qualidadeEncontrada = qualidade;
			}
		}

		return qualidadeEncontrada;
	}
}
